当前位置:  开发笔记 > 编程语言 > 正文

S3调度`rbind`和`cbind`

如何解决《S3调度`rbind`和`cbind`》经验,为你挑选了1个好方法。

我正在尝试rbind为特定类编写方法.这是一个简单的例子,它不起作用(至少对我而言):

rbind.character <- function(...) {
    do.call("paste", list(...))
}

输入此函数后,我似乎可以确认它是R知道的有效方法:

> methods("rbind")
[1] rbind.character  rbind.data.frame rbind.rootogram* rbind.zoo*      
see '?methods' for accessing help and source code

但是,如果我尝试使用它,则无法识别:

> rbind("abc", "xyz")
     [,1] 
[1,] "abc"
[2,] "xyz"
> #### compared with ####
> rbind.character("abc", "xyz")
[1] "abc xyz"

帮助页面表示调度内部执行如下:

    对于每个参数,我们从class属性中获取可能的类成员资格列表.

    我们轮流检查每个班级,看看是否有适用的方法.

    如果我们找到适用的方法,我们确保它与先前参数确定的任何方法相同.如果它是相同的,我们继续,否则我们立即转到默认代码.

有了rbind("abc", "xyz"),我相信所有这些标准都是满意的.给出了什么,我该如何解决?



1> Roland..:
attributes("abc")
#NULL

一个character向量没有一个类属性.我不认为可以rbind为隐式类调度方法.


这是一个隐含的类.`rbind`的方法dispatch只检查类属性,即显式类.
似乎误导了`class("abc")````character"`.
这似乎可能是[rbind]的来源(https://github.com/wch/r-source/blob/b156e3a711967f58131e23c1b1dc1ea90e2f0c43/src/main/bind.c#L1039).它似乎是测试它是否首先是一个对象.这与其他函数的调度方式有些不同.
推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有